/* 
 * File:   BaseServerProtocol.h
 * Author: wilq
 *
 * Created on June 14, 2012, 10:34 AM
 */

#ifndef BASESERVERPROTOCOL_H
#define	BASESERVERPROTOCOL_H

#include "NetworkProtocol.h"
#include "Packets.h"
#include "DataBase.h"

using namespace std;
using namespace CSNetworkLib;
using namespace CSDatabaseLib;

/** Podstawowa klasa protokołu, zawiera podstawowe operację na pakietach
 */
class BaseServerProtocol : public NetworkProtocol {
protected:
    /**
     * Pobiera string z pakietu
     * @param packet pakiet z którego będzie wyciągany string
     * @param position pozycja wartości
     * @return odczytany string
     */
    string _Get_String(const NetworkPacket &packet, uint32_t position);

    /**
     * Zapisuję plik do pakietu
     * @param packet pakiet do którego będzie zapisywan
     * @param file
     */
    void _Push_File(NetworkPacket &packet, File file);

    /**
     * Zapisuję folder do pakietu
     * @param packet pakiet do którego będą zapisywane dane
     * @param folder folder który zostanie zapisany
     */
    void _Push_Folder(NetworkPacket &packet, Folder folder);

    /**
     * Zapisuję dane o użytkowniku do pakietu
     * @param packet pakiet do którego będą zapisywane dane
     * @param user użytkownik 
     */
    void _Push_User(NetworkPacket &packet, User user);

    /**
     * Zapisuję informację na temat magazynu do pakietu
     * @param packet pakiet do którego będą zapisywane dane
     * @param storage magazyn 
     */
    void _Push_Storage(NetworkPacket &packet, Storage storage);

    /**
     * Zapisuję informację na temat grupy do pakietu
     * @param packet pakiet do którego będą zapisywane dane
     * @param group grupa
     */
    void _Push_Group(NetworkPacket &packet, Group group);

public:
    BaseServerProtocol(socket_ptr s);

    virtual ~BaseServerProtocol() {
    }

private:

};

extern DataBase* g_db;

#endif	/* BASESERVERPROTOCOL_H */